﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading;


//namespace ASoft.Service
//{
//    public static class RealTimeService
//    {
//        static object lockKey = new object();
//        static List<RealTimeItem> items = new List<RealTimeItem>();
//        static Thread thread;

//        static RealTimeService()
//        {
//            thread = new Thread(new ThreadStart(RealTimeService.Do));
//            thread.Name = "RealTimeServiceThread";
//            thread.IsBackground = true;
//            thread.Start();
//        }

//        public static bool IsAlive { get; set; }

//        public static bool IsExit { get; set; }

//        static void Do()
//        {
//            if (ExceptionAction == null)
//            {
//                DoEx();
//                return;
//            }
//        Next:

//            try
//            {
//                DoEx();
//            }
//            catch (Exception ex)
//            {
//                ExceptionAction(ex);
//            }

//            goto Next;

//        }

//        static void DoEx()
//        {
//            while (true)
//            {
//                if (IsExit)
//                {
//                    break;
//                }
//                if (IsAlive)
//                {

//                    var doItem = items.Where(p => p.Time < DateTime.Now).OrderBy(p => p.Time).FirstOrDefault();
//                    while (doItem != null)
//                    {
//                        if (!IsAlive)
//                        {
//                            break;
//                        }
//                        doItem.Action();
//                        lock (lockKey)
//                        {
//                            items.Remove(doItem);
//                        }
//                    }
//                }
//                Thread.Sleep(10);
//            }
//        }

//        public static void AddItem(RealTimeItem item)
//        {
//            lock (lockKey)
//            {
//                items.Add(item);
//            }
//        }

//        public static void AddItem(DateTime time, Action action, string description)
//        {
//            AddItem(new RealTimeItem(time, action, description));
//        }

//        public static Action<Exception> ExceptionAction { get; set; }
//    }
//}
